package fr.charlott.core.service.impl;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import fr.charlott.core.repository.PersonneJpaRepository;
import fr.charlott.core.repository.model.Personne;
import fr.charlott.core.service.PersonneService;

@Service("corePersonneService")
public class PersonneServiceImpl implements PersonneService {

	private PersonneJpaRepository personneJpaRepository;

	public PersonneServiceImpl() {
		super();
	}

	@Autowired
	public PersonneServiceImpl(PersonneJpaRepository personneJpaRepository) {
		this();
		this.personneJpaRepository = personneJpaRepository;
	}

	@Override
	public Personne chercherParId(Long id) {
		return personneJpaRepository.findOne(id);
	}

	@Override
	@Transactional(readOnly = true)
	public List<Personne> chargerToutesLesPersonnes() {
		return personneJpaRepository.findAll();
	}
	
	@Override
	@Transactional(readOnly = true)
	public List<Personne> chargerProchainesVisites(Date dateFrom, Date dateTo) {
		return personneJpaRepository.findByDerniereVisiteBetween(dateFrom, dateTo);
	}
	
	@Override
	@Transactional(readOnly = true)
	public List<Personne> chargerTousLesAnniversaires() {
		return personneJpaRepository.findByDateDeNaissanceNotNull();
	}
	
	@Override
	@Transactional
	public void supprimerToutesLesPersonnes(){
		personneJpaRepository.deleteAll();
	}
	
	// getters - setters

	/**
	 * @param personneJpaRepository
	 *            the personneJpaRepository to set
	 */
	@Override
	public void setPersonneJpaRepository(PersonneJpaRepository personneJpaRepository) {
		this.personneJpaRepository = personneJpaRepository;
	}

}
